运算符是进行某些操作,并且可以用诸如 +
等符号或特殊关键词加以表达的功能。运算符需要一些数据来进行操作,这些数据就被称作操作数。表达式可以拆分成运算符与操作数。一个表达式的简单例子便是 2+3
,其中 2
和 3
被称为操作数,”+“ 称为运算符。
算术运算符
+
(加)- 两个对象相加。
3+5
则输出8
。'a' + 'b'
则输出'ab'
。
-
(减)- 从一个数中减去另一个数,如果第一个操作数不存在,则假定为零。
-5.2
将输出一个负数,50 - 24
输出26
。
*
(乘)- 给出两个数的乘积,或返回字符串重复指定次数后的结果。
2 * 3
输出6
。'la' * 3
输出'lalala'
。
**
(乘方)- 返回 x 的 y 次方。
3 ** 4
输出81
(即3 * 3 * 3 * 3
)。
/
(除)- x 除以 y
13 / 3
输出4.333333333333333
。-13.5 / 3
输出-4.5
。
//
(整除)- x 除以 y 并对结果 向下取整 至最接近的整数。
13 // 3
输出4
。-13 // 3
输出-5
。-13.5 / 3
输出-5.0
。
%
(取模)- 返回除法运算后的余数,被除数-(除数*整除的商)。
13 % 3
输出1
。-25.5 % 2.25
输出1.5
。-13.5 % 3
输出1.5
。1.5 = -13.5-(3*-5)
关系运算符
<
(小于)- 返回 x 是否小于 y。
5 < 3
输出False
,3 < 6
输出True
。
>
(大于)- 返回 x 是否大于 y。
5 > 3
返回True
。
<=
(小于等于)- 返回 x 是否小于或等于 y。
x = 3; y = 6; x<=y
返回True
。
>=
(大于等于)- 返回 x 是否大于或等于 y。
x = 4; y = 3; x>=3
返回True
。
==
(等于)- 比较两个对象是否相等。
x = 2; y = 2; x == y
返回True
。x = 'str'; y = 'stR'; x == y
返回False
。x = 'str'; y = 'str'; x == y
返回True
。
!=
(不等于)- 比较两个对象是否不相等。
x = 2; y = 3; x != y
返回True
。
提示 所有的比较运算符返回的结果均为
True
或False
。提示 比较可以任意组成组成链接。
1
2
3
4
5
6
7
8
9
10
11
12 3 < 5 < 7
True
3 < 5 > 7
False
3 < 5 > 4
True
7 <= 6 >= 5
False
7 >= 6 == 6
True
7 >= 6 == 6 < 9 > 2
True
赋值运算符
=
(赋值)- 简单的赋值运算符。
x = 2; y = 3;
。
+=
(加法赋值)- 加法赋值运算符。
x += 2;
等价于x = x + 2
。
-=
(减法赋值)- 减法赋值运算符。
x -= 2;
等价于x = x - 2
。
*=
(乘法赋值)- 乘法赋值运算符。
x *= 2;
等价于x = x * 2
。
/=
(除法赋值)- 除法赋值运算符。
x /= 2;
等价于x = x / 2
。
//=
(整除赋值)- 整除赋值运算符。
x //= 2;
等价于x = x // 2
。
%=
(取模赋值)- 取模赋值运算符。
x %= 2;
等价于x = x % 2
。
**=
(幂赋值)- 幂赋值运算符。
x **= 2;
等价于x = x ** 2
。
提示
变量 = 变量 运算 表达式
等价于变量 运算 = 表达式
。
逻辑运算符
not
(逻辑“非”)- 如果 x 是
True
,则返回False
。如果 x 是False
,则返回True
。 x = True; not x
返回False
。
- 如果 x 是
and
(逻辑“与”)- 如果 x 是
False
,则x and y
返回False
,否则返回 y 的计算值。 - 当 x 是
False
时,x = False; y = True; x and y
将返回False
。
- 如果 x 是
or
(逻辑“或”)- 如果 x 是
True
,则返回True
,否则它将返回 y 的计算值。 x = True; y = False; x or y
将返回True
。
- 如果 x 是
提示 逻辑运算 存在中“短路”现象:仅计算逻辑表达式中的一部分便能确定结果,而不对整个表达式进行计算的现象。逻辑与和逻辑或都存在短路现象,比如
x = False; x and y
将返回False
,而不会计算 y,因为它已经能确定整个表达式将是False
而不会是别的值。同理x = True; x or y
将返回Ture
,而不会计算 y。
位运算符
&
(按位与)- 对数字进行按位与操作。
5 & 3
输出1
。5
用二进制数表示为0101
,3
用二进制数表示为0011
,按位与会得到0001
,表示成十进制为1
。
|
(按位或)- 对数字进行按位或操作。
5 | 3
输出7
。5
用二进制数表示为0101
,3
用二进制数表示为0011
,按位与会得到0111
,表示成十进制为7
。
^
(按位异或)- 对数字进行按位异或操作。
5 ^ 3
输出6
。5
用二进制数表示为0101
,3
用二进制数表示为0011
,按位与会得到0110
,表示成十进制为6
。
~
(按位取反)- x 的按位取反结果为 -(x+1)。
~5
输出-4
。有关本例的更多细节可以参阅:http://stackoverflow.com/a/11810203 。
<<
(左移)- 将数字的位向左移动指定的位数。(每个数字在内存中以二进制数表示,即 0 和1)
2 << 2
输出8
。2
用二进制数表示为10
,向左移 2 位会得到1000
,表示成十进制为8
。
>>
(右移)- 将数字的位向右移动指定的位数。
11 >> 1
输出5
。11
在二进制中表示为1011
,右移一位后输出0101
这一结果,表示成十进制为5
。
成员运算符
in
(包含)- 如果在指定的序列中找到值返回 True,否则返回 False。
'a' in 'abc'
输出为True,'d' in 'abc'
输出为False。
not in
(不包含)- 如果在指定的序列中没有找到值返回 True,否则返回 False。
'a' not in 'abc'
输出为False,'d' not in 'abc'
输出为True。
身份运算符
is
- 判断两个标识符是不是引用自同一个对象。
a = 20; b = 20; a is b;
输出为 True,引用自同一个对象。
is not
- 判断两个标识符是不是引用自不同对象。
a = [1, 2, 3]; b = a[:]; b is not a;
, 输出为 True,不是引用自同一个对象。
提示 is 与 == 区别:is 用于判断两个变量引用对象是否为同一个, == 用于判断引用变量的值是否相等。
1 | 1, 2, 3] a = [ |
运算符优先级
为了保持完整,下表是从 Python 参考手册 中引用而来。你最好使用圆括号操作符来对运算符与操作数进行分组,以更加明确地指定优先级。这也能使得程序更加可读。
lambda
:Lambda 表达式if - else
:条件表达式or
:布尔“或”and
:布尔“与”not x
:布尔“非”in, not in, is, is not, <, <=, >, >=, !=, ==
:比较,包括成员资格测试(Membership Tests)和身份测试(Identity Tests)。|
:按位或^
:按位异或&
:按位与<<, >>
:移动+, -
:加与减*, /, //, %
:乘、除、整除、取余+x, -x, ~x
:正、负、按位取反**
:求幂x[index], x[index:index], x(arguments...), x.attribute
:下标、切片、调用、属性引用(expressions...), [expressions...], {key: value...}, {expressions...}
:显示绑定或数组、显示列表、显示字典、显示设置
在上表中位列同一行的运算符具有相同优先级。例如 +
和 -
就具有相同的优先级。
改变运算顺序
为了使表达式更加易读,我们可以使用括号。举个例子,2 + (3 * 4)
自是要比 2 + 3 * 4
要更加容易理解,因为后者还要求你要了解运算符的优先级。和其它的一切一样,使用括号同样也要适度(而不要过度),同时亦应不要像 (2 + (3 * 4))
这般冗余。
使用括号还有一个额外的优点——它能帮助我们改变运算的顺序。同样举个例子,如果你希望在表达式中计算乘法之前应先计算加法,那么你可以将表达式写作 (2 + 3) * 4
。